package org.example.likou150.array;

public class Convert {
    public static void main(String[] args) {
        Convert convert=new Convert();
        System.out.println(convert.convert("PAYPALISHIRING", 3));
    }

    public String convert(String s, int numRows) {
        if(numRows == 1) {
            return s;
        }
        char[] ch = s.toCharArray();
        int n = ch.length;
        char[] ret = new char[n];
        int d = 2 * numRows - 2;
        int step = 0;

        for(int i = 0;i < numRows;i++) {
            int tmp = i;
            int x = 0;
            while (tmp < n && step < n) {
                if (i == 0) {
                    ret[step] = ch[tmp];
                    tmp += d;
                    step++;
                } else if(i == numRows - 1) {
                    ret[step] = ch[tmp];
                    tmp += d;
                    step++;
                } else {
                    ret[step++] = ch[tmp];
                    if(d - tmp + x * d < n && step < n) {
                        ret[step++] = ch[d - tmp + x * d];
                        x+=2;
                    }
                    tmp += d;
                }
            }

        }
        return new String(ret);
    }


//    public String convert(String s, int numRows) {
//        if(numRows==1) return s;
//        StringBuilder[] sbs=new StringBuilder[numRows];
//        for (int i = 0; i < sbs.length; i++) {
//            sbs[i]=new StringBuilder();
//        }
//        char[] charArray = s.toCharArray();
//        boolean enable=false;
//        int index=0;
//        for (int i = 0; i < charArray.length; i++) {
//            if(!enable){
//                sbs[index++].append(charArray[i]);
//                if(index==numRows-1){
//                    enable=true;
//                }
//            }else{
//                sbs[index--].append(charArray[i]);
//                if(index==0){
//                    enable=false;
//                }
//            }
//        }
//        for (int i = 1; i < sbs.length; i++) {
//            sbs[0].append(sbs[i]);
//        }
//        return sbs[0].toString();
//    }
}
